/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.talentos.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.talentos.vo.PessoaVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;



/**
 * Data Access Object da entidade TB_Pessoa. Essa classe é responsável por todas as
 * operações de banco de dados relacionadas à entidade.*
 *
 *  @author Marcelo Moraes Lima - 2009
 */
public class PessoaDAO extends BaseDAO<PessoaVO> {

    @Override
    public void inserir(PessoaVO pessoa) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TB_Pessoa(  NO_Pessoa, TL_Principal, TL_Secundario, ED_Pessoa," +
                "NO_Cidade, SG_UF, NR_CEP, EE_Pessoa)");
        query.append("VALUES (?, ?, ?, ?, ?, ?, ?, ?)");

        List<?> parametros = criarParametros(pessoa.getNoPessoa(), pessoa.getTlPrincipal(),
                pessoa.getTlSecundario(), pessoa.getEdPessoa(), pessoa.getNoCidade(),
                pessoa.getSgUF(), pessoa.getNrCEP(), pessoa.getEePessoa());

        Integer idGerado = ((Long) executarInsercao(query.toString(), parametros)).intValue();

        pessoa.setIdPessoa(idGerado);


  //      throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void alterar(PessoaVO pessoa) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TB_Pessoa SET NO_Pessoa = ?,");
        query.append("TL_Principal = ?");
        query.append("TL_Secundario = ?");
        query.append("ED_Pessoa = ?");
        query.append("NO_Cidade = ?");
        query.append("SG_UF = ?");
        query.append("NR_CEP = ?");
        query.append("EE_Pessoa = ?");
        query.append("WHERE NO_Pessoa = ?");

        List<?> parametros = criarParametros(pessoa.getNoPessoa(), pessoa.getTlPrincipal(),
                pessoa.getTlSecundario(), pessoa.getEdPessoa(), pessoa.getNoCidade(),
                pessoa.getSgUF(), pessoa.getNrCEP(), pessoa.getEePessoa());

        executarAlteracao(query.toString(), parametros);

     //   throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void excluir(PessoaVO pessoa) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TB_Pessoa");
        query.append("WHERE ID_Pessoa = ?");

        executarAlteracao(query.toString(), criarParametros(pessoa.getIdPessoa()));


    //    throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public PessoaVO consultarPorId(Serializable id) {
    return null;
        //    throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List<PessoaVO> consultarPorExemplo(PessoaVO pessoa) {
    
        
        List<PessoaVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_Pessoa T");

        mapearQueryParaExemplo(query, pessoa);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
        
        
        //    throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    protected PessoaVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        PessoaVO pessoa = new PessoaVO();

        pessoa.setNoPessoa(new String(rs.getString("NO_Pessoa")));
        pessoa.setTlPrincipal(new Integer(rs.getInt("TL_Principal")));
        pessoa.setTlSecundario(new Integer(rs.getInt("TL_Secundario")));
        pessoa.setEdPessoa(new String(rs.getString("ED_Pessoa")));
        pessoa.setNoCidade(new String(rs.getString("NO_Cidade")));
        pessoa.setSgUF(new String(rs.getString("SG_UF")));
        pessoa.setNrCEP(new Integer(rs.getInt("NR_CEP")));
        pessoa.setEePessoa(new String(rs.getString("EE_Pessoa")));

        return pessoa;

    //    throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, PessoaVO pessoa) {

        if (pessoa.getNoPessoa() != null) {
            query.append("AND T.No_Pessoa = ?");
            adicionarParametro(pessoa.getNoPessoa());
        }

        if (pessoa.getTlPrincipal() != null) {
            query.append("AND T.TL_Principal = ?");
            adicionarParametro(pessoa.getTlPrincipal());
        }

        if (pessoa.getTlSecundario() != null) {
            query.append("AND T.TL_Secundario = ?");
            adicionarParametro(pessoa.getTlSecundario());
        }

        if (pessoa.getEdPessoa() != null) {
            query.append("AND T.ED_Pessoa LIKE ?");
            adicionarParametro("%" + pessoa.getEdPessoa() + "%");
        }

        if (pessoa.getNoCidade() != null) {
            query.append("AND T.NO_Cidade LIKE ?");
            adicionarParametro(pessoa.getNoCidade());
        }

        if (pessoa.getSgUF() != null) {
            query.append("AND T.SG_UF LIKE ?");
            adicionarParametro(pessoa.getSgUF());
        }

        if (pessoa.getNrCEP() != null) {
            query.append("AND T.NR_CEP LIKE ?");
            adicionarParametro(pessoa.getNrCEP());
        }

        if (pessoa.getEePessoa() != null) {
            query.append("AND T.EE_Pessoa LIKE ?");
            adicionarParametro(pessoa.getEePessoa());
        }

    //    throw new UnsupportedOperationException("Not supported yet.");
    }

}
